---------> Furb3T <---------

presenta:

Da Time Limit a Registrato.

    Salve a tutti i miei carissimi lettori, oggi vi voglio deliziare con un prg che ha dell'incredibile: voi pensavate di avere un prg shareware per le mani con tanto di nag screen e time limit, ed invece i programmatori avevano previsto la possibilit� di registrarsi senza per� far vedere questa opzione all'utente, e solo dopo un'analisi del codice assembler ho scoperto questa variante.... SIETE CURIOSI !!!! Benissimo procediamo.

    Il prg target � Adobe ImageReady 1.0 e lo strumento che andremo ad utilizzare sar� il classico Softice. Come si presenta il prg quando viene lanciato? Con una classica nag screen che indica tra l'altro il tempo residuo di vita del prg. A questo punto potremmo gi� agire eliminando il time limit e la nag, come? semplicemente usando il cmd  BPX DIALOGBOXPARAMA, in questo modo possiamo vedere dove il prg effettua il controllo del tempo e qual � la call che fa apparire sullo schermo la nag. Tuttavia questo tutorial si prefigge altri interessi, come vi avevo accennato all'inizio, quindi lascio questa operazione a chi vuole divertirsi ( consiglio a chi volesse seguire questa strada, che deve stare attento ed inserire un'istruzione che vada a modificare EDX altrimenti il prg crasher�).

    Bene bene ora entriamo nel merito del tutorial. Prima di tutto portate la data del vostro sistema 2 mesi avanti, in questo modo quando lancerete il prg, questo si dovrebbe presentare con una nag che vi dice che avete terminato il periodo di prova. Fatto ci�, fissate in Softice un BPX  DIALOGBOXPARAMA  e lanciate l'applicazione; sicuramente entrerete in Sice, quindi premete F12 e sarete di nuovo nel prg che avr� caricato la nag. Premete l'unico tasto che potete premere, cio� QUIT, e sarete di nuovo dentro Sice. Ora fate caso ad una cosa; voi siete nell'istruzione successiva alla call che crea la nag, e questa istruzione vi dice :  CMP  EAX, 06 , ma se andate a vedere EAX potete vedere che ha come valore  EAX = 00000007 ; ci� vuol dire che premendo il tasto QUIT viene ritornato al controllo il valore 7, e dato che QUIT � l'unico tasto che � possibile premere perch� esiste quell'istruzione CMP EAX,06 ?? Per scoprirlo che ho fatto, ho modificato il valore di EAX, con il comando  R   EAX =  00000006 , a questo punto il  JE che si trova subito dopo il CMP  � true e quindi avviene il salto che ci porta .............. ma che succede, ritorniamo nel prg e compare un nag dove vengono richieste le informazioni dell'utente per registrarsi, wow abbiamo trovato un'insieme di istruzioni che erano state nascoste.

    Riempite tutti i campi e premete NEXT, comparir� una nuova schermata dove vi verr� richiesta la modalit� di pagamento tramite Carta di Credito; niente paura inserite un qualunque codice a 10 cifre nel campo del numero della carta di credito, inserite una qualunque scadenza e premete NexT; adesso vi chieder� come volete contattare la soci�t�, optate telefonicamente, quindi nella schermata successiva vi verr� richiesto di inserire il codice di sblocco del prg, codice che dovrebbe esservi stato dato dalla Adobe. Ok inseriamo un codice qualunque e mettiamo in Sice un BPX HMEMCPY,   premete F5, ritornerete quindi nel prg, premete OK e vediamo che succede. Eccoci rientrati in Sice, F12 per circa 10 volte e vi ritroverete dentro una dll di image ready ed esattamente rsagnt32.dll, steppate con F10 fino ad arrivare a queste istruzioni:

1000B2DA   DEC ECX   -----> ECX  contiene il numero di cifre del codice che abbiamo inserito
1000B2DB   CMP ECX,00A
   ----> se le cifre del codice sono diverse da 10 allora non avviene il
1000B2DE    JE 1000B31B           
    salto

per non modificare troppo il prg, inseriamo un codice a 10 cifre e ripetiamo l'operazione; questa volta il JE sar� soddisfatto e avverr� il salto, quindi arriviamo all'istruzione 1000B31B:

1000B31B  MOV  EDX , [100317D4]
1000B321   PUSH  1002B580  
------> se fate D 1002B580 vedrete un codice alfanumerico
1000B326   ADD  EDX , 00000106
1000B32C  PUSH  EDX
1000B32D  PUSH  1002B560   
1000B332   CALL  1000B950
1000B337   ADD  ESP , 00C
1000B33A  PUSH  1002B570  
-----> in 1002B570 c' � il codice che abbiamo inserito
1000B33F   PUSH  1002B580
1000B344   CALL  1001FAB0 
-----> questa call verifica che il codice inserito sia giusto e se lo �
1000B349   ADD  ESP , 008
                 ritorna come valore di EAX = 0
1000B34C  TEST  EAX , EAX
1000B3AB    JNE  1000B3AB

Dato che avendo inserito un numero a caso di 10 cifre sicuramente non sar� quello giusto, avete due alternative:  1) Entrate nella call che si trova su 1000B344 e cercate di capire come viene generato il vero codice, oppure ( molto pi� semplicemente)  2) quando vi trovate sull'istruzione 1000B349, modificate il valore di Eax con il comando R  EAX =  0, in entrambi i casi il prg vi dir� che da quel momento in poi � registrato, e voi non avrete pi� scocciature con le nag iniziali e con il time limit.

Ringraziamenti : A tutto il   mio gruppo preferito RingZer0.